package br.com.abelha.manager.db;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.util.Log;
import br.com.abelha.manager.entity.FormA;

/**
 * @author dalsonsouza
 */

public class DAOFormA {
	
	private DBAdapter dbAdapter;
	
	public DAOFormA(Context context) {
		dbAdapter = new DBAdapter(context).open();
	}
	
	public Cursor listAllCursor() {
		return getCursor(null, null);
	}
	
	public Cursor listPreCadastros() {
		String selection = FormA.PRE_CADASTRO + "=?";
		String[] selectionArgs = new String[]{"1"};
		
		return getCursor(selection, selectionArgs);
	}
	
	public Cursor listCadastros() {
		String selection = FormA.PRE_CADASTRO + "=?";
		String[] selectionArgs = new String[]{"0"};
		
		return getCursor(selection, selectionArgs);
	}
	
	public Cursor getCursor(String selection, String[] selectionArgs) {
		FormA formA = new FormA();
		Cursor cursor = dbAdapter.query(formA.getTableName(), 
						null , 
						selection, 
						selectionArgs, 
						null, 
						null);
		
		return cursor;
	}
	
	public List<FormA> listAll() {
		FormA formA = new FormA();
		List<FormA> list = new ArrayList<FormA>();
		Cursor cursor = listAllCursor();
		
		if(cursor == null) {
			formA = null;
		} else {
			cursor.moveToFirst();
			while(!cursor.isAfterLast()) {
				
				formA = getFields(cursor);
				list.add(formA);
				
				cursor.moveToNext();
			}
			
			if(!cursor.isClosed()) cursor.close();
		}
		
		return list;
	}
	
	public long insert(FormA formA) throws Throwable {
		
		long id = 0;
		try {
			dbAdapter.beginTransaction();
		
			Object[] contents = new Object[]
			        {FormA.ID_FICHA, null,
					FormA.ESTADO, formA.getEstado(),
					FormA.ENDERECO, formA.getEndereco(),
					FormA.NUMERO, formA.getNumero(),
					FormA.BAIRRO, formA.getBairro(),
					FormA.CEP, formA.getCep(),
					FormA.MUNICIPIO, formA.getMunicipio(),
					FormA.SEGMENTO, formA.getSegmento(),
					FormA.AREA, formA.getArea(),
					FormA.MICROAREA, formA.getMicroArea(),
					FormA.FAMILIA, formA.getFamilia(),
					FormA.DATA_EMISSAO, formA.getData_emissao(),
					FormA.ID_TIPO_CASA, formA.getId_tipo_casa(),
					FormA.TIPO_CASA_QUAL, formA.getTipo_casa_qual(),
					FormA.NUMERO_COMODOS, formA.getNum_comodos(),
					FormA.ENERGIA_ELETRICA, formA.getEnergia_eletrica(),
					FormA.ID_DESTINO_LIXO, formA.getId_destino_lixo(),
					FormA.ID_TRAT_AGUA, formA.getId_trat_agua(),
					FormA.ID_ABAST_AGUA, formA.getId_abast_agua(),
					FormA.ID_DESTINO_FEZES, formA.getId_destino_fezes(),
					FormA.ID_PLANO_SAUDE, formA.getId_plano_saude(),
					FormA.PLANO_SAUDE, formA.getPlano_saude(),
					FormA.NUMERO_PESSOAS_PLANO, formA.getNumero_pessoas_plano(),
					FormA.OBSERVACOES, formA.getObservacoes(),
					FormA.DOENCA_BENZEDEIRA, formA.getDoenca_benzedeira(),
					FormA.DOENCA_FARMACIA, formA.getDoenca_farmacia(),
					FormA.DOENCA_HOSPITAL, formA.getDoenca_hospital(),
					FormA.DOENCA_OUTROS, formA.getDoenca_outros(),
					FormA.DOENCA_QUAIS, formA.getDoenca_quais(),
					FormA.DOENCA_US, formA.getDoenca_us(),
					FormA.MEIOS_COMUN_RADIO, formA.getMeios_comun_radio(),
					FormA.MEIOS_COMUN_TV, formA.getMeios_comun_tv(),
					FormA.GRUPOS_comun_ASSOCIACOES, formA.getGrupos_comun_associacoes(),
					FormA.GRUPOS_comun_COOPERATIVA, formA.getGrupos_comun_cooperativa(),
					FormA.GRUPOS_comun_OUTROS, formA.getGrupos_comun_outros(),
					FormA.GRUPOS_comun_QUAIS, formA.getGrupos_comun_quais(),
					FormA.GRUPOS_comun_RELIGIOSO, formA.getGrupos_comun_religioso(),
					FormA.MEIO_TRANSP_CAMINHAO, formA.getMeio_transp_caminhao(),
					FormA.MEIO_TRANSP_CARRO, formA.getMeio_transp_carro(),
					FormA.MEIO_TRANSP_CARROCA, formA.getMeio_transp_carroca(),
					FormA.MEIO_TRANSP_ONIBUS, formA.getMeio_transp_onibus(),
					FormA.MEIO_TRANSP_OUTROS, formA.getMeio_transp_outros(),
					FormA.MEIO_TRANSP_QUAIS, formA.getMeio_transp_quais(),
					FormA.NUM_BOLSA_FAMILIA, formA.getNum_bolsa_familia(),
					FormA.PRE_CADASTRO, formA.getPre_cadastro()};
			
			id = dbAdapter.insert(formA.getTableName(), contents);
			
			dbAdapter.setTransactionSuccessful();
		} catch (Throwable e) {
			Log.e(this.getClass().getName(), "Error", e);
			throw e;
		} finally {
			dbAdapter.endTransaction();
		}
		
		return id;
	}
	
	public long insertFromWs(FormA formA) throws Throwable {
		
		long id = 0;
		try {
			dbAdapter.beginTransaction();
		
			Object[] contents = new Object[]
			        {FormA.ID_FICHA, formA.getId_ficha(),
					FormA.ESTADO, formA.getEstado(),
					FormA.ENDERECO, formA.getEndereco(),
					FormA.NUMERO, formA.getNumero(),
					FormA.BAIRRO, formA.getBairro(),
					FormA.CEP, formA.getCep(),
					FormA.MUNICIPIO, formA.getMunicipio(),
					FormA.SEGMENTO, formA.getSegmento(),
					FormA.AREA, formA.getArea(),
					FormA.MICROAREA, formA.getMicroArea(),
					FormA.FAMILIA, formA.getFamilia(),
					FormA.DATA_EMISSAO, formA.getData_emissao(),
					FormA.ID_TIPO_CASA, formA.getId_tipo_casa(),
					FormA.TIPO_CASA_QUAL, formA.getTipo_casa_qual(),
					FormA.NUMERO_COMODOS, formA.getNum_comodos(),
					FormA.ENERGIA_ELETRICA, formA.getEnergia_eletrica(),
					FormA.ID_DESTINO_LIXO, formA.getId_destino_lixo(),
					FormA.ID_TRAT_AGUA, formA.getId_trat_agua(),
					FormA.ID_ABAST_AGUA, formA.getId_abast_agua(),
					FormA.ID_DESTINO_FEZES, formA.getId_destino_fezes(),
					FormA.ID_PLANO_SAUDE, formA.getId_plano_saude(),
					FormA.PLANO_SAUDE, formA.getPlano_saude(),
					FormA.NUMERO_PESSOAS_PLANO, formA.getNumero_pessoas_plano(),
					FormA.OBSERVACOES, formA.getObservacoes(),
					FormA.DOENCA_BENZEDEIRA, formA.getDoenca_benzedeira(),
					FormA.DOENCA_FARMACIA, formA.getDoenca_farmacia(),
					FormA.DOENCA_HOSPITAL, formA.getDoenca_hospital(),
					FormA.DOENCA_OUTROS, formA.getDoenca_outros(),
					FormA.DOENCA_QUAIS, formA.getDoenca_quais(),
					FormA.DOENCA_US, formA.getDoenca_us(),
					FormA.MEIOS_COMUN_RADIO, formA.getMeios_comun_radio(),
					FormA.MEIOS_COMUN_TV, formA.getMeios_comun_tv(),
					FormA.GRUPOS_comun_ASSOCIACOES, formA.getGrupos_comun_associacoes(),
					FormA.GRUPOS_comun_COOPERATIVA, formA.getGrupos_comun_cooperativa(),
					FormA.GRUPOS_comun_OUTROS, formA.getGrupos_comun_outros(),
					FormA.GRUPOS_comun_QUAIS, formA.getGrupos_comun_quais(),
					FormA.GRUPOS_comun_RELIGIOSO, formA.getGrupos_comun_religioso(),
					FormA.MEIO_TRANSP_CAMINHAO, formA.getMeio_transp_caminhao(),
					FormA.MEIO_TRANSP_CARRO, formA.getMeio_transp_carro(),
					FormA.MEIO_TRANSP_CARROCA, formA.getMeio_transp_carroca(),
					FormA.MEIO_TRANSP_ONIBUS, formA.getMeio_transp_onibus(),
					FormA.MEIO_TRANSP_OUTROS, formA.getMeio_transp_outros(),
					FormA.MEIO_TRANSP_QUAIS, formA.getMeio_transp_quais(),
					FormA.NUM_BOLSA_FAMILIA, formA.getNum_bolsa_familia(),
					FormA.PRE_CADASTRO, 0};
			
			id = dbAdapter.insert(formA.getTableName(), contents);
			
			dbAdapter.setTransactionSuccessful();
		} catch (Throwable e) {
			Log.e(this.getClass().getName(), "Error", e);
			throw e;
		} finally {
			dbAdapter.endTransaction();
		}
		
		return id;
	}
	
	public int update(FormA formA) throws Throwable {
		
		int id = 0;
		try {
			dbAdapter.beginTransaction();
			
			String[] whereArgs = new String[]{String.valueOf(formA.getId_ficha())};
		
			Object[] contents = new Object[]
			           			        {FormA.ESTADO, formA.getEstado(),
										FormA.ENDERECO, formA.getEndereco(),
										FormA.NUMERO, formA.getNumero(),
										FormA.BAIRRO, formA.getBairro(),
										FormA.CEP, formA.getCep(),
										FormA.MUNICIPIO, formA.getMunicipio(),
										FormA.SEGMENTO, formA.getSegmento(),
										FormA.AREA, formA.getArea(),
										FormA.MICROAREA, formA.getMicroArea(),
										FormA.FAMILIA, formA.getFamilia(),
										FormA.DATA_EMISSAO, formA.getData_emissao(),
										FormA.ID_TIPO_CASA, formA.getId_tipo_casa(),
										FormA.TIPO_CASA_QUAL, formA.getTipo_casa_qual(),
										FormA.NUMERO_COMODOS, formA.getNum_comodos(),
										FormA.ENERGIA_ELETRICA, formA.getEnergia_eletrica(),
										FormA.ID_DESTINO_LIXO, formA.getId_destino_lixo(),
										FormA.ID_TRAT_AGUA, formA.getId_trat_agua(),
										FormA.ID_ABAST_AGUA, formA.getId_abast_agua(),
										FormA.ID_DESTINO_FEZES, formA.getId_destino_fezes(),
										FormA.ID_PLANO_SAUDE, formA.getId_plano_saude(),
										FormA.PLANO_SAUDE, formA.getPlano_saude(),
										FormA.NUMERO_PESSOAS_PLANO, formA.getNumero_pessoas_plano(),
										FormA.OBSERVACOES, formA.getObservacoes(),
										FormA.DOENCA_BENZEDEIRA, formA.getDoenca_benzedeira(),
										FormA.DOENCA_FARMACIA, formA.getDoenca_farmacia(),
										FormA.DOENCA_HOSPITAL, formA.getDoenca_hospital(),
										FormA.DOENCA_OUTROS, formA.getDoenca_outros(),
										FormA.DOENCA_QUAIS, formA.getDoenca_quais(),
										FormA.DOENCA_US, formA.getDoenca_us(),
										FormA.MEIOS_COMUN_RADIO, formA.getMeios_comun_radio(),
										FormA.MEIOS_COMUN_TV, formA.getMeios_comun_tv(),
										FormA.GRUPOS_comun_ASSOCIACOES, formA.getGrupos_comun_associacoes(),
										FormA.GRUPOS_comun_COOPERATIVA, formA.getGrupos_comun_cooperativa(),
										FormA.GRUPOS_comun_OUTROS, formA.getGrupos_comun_outros(),
										FormA.GRUPOS_comun_QUAIS, formA.getGrupos_comun_quais(),
										FormA.GRUPOS_comun_RELIGIOSO, formA.getGrupos_comun_religioso(),
										FormA.MEIO_TRANSP_CAMINHAO, formA.getMeio_transp_caminhao(),
										FormA.MEIO_TRANSP_CARRO, formA.getMeio_transp_carro(),
										FormA.MEIO_TRANSP_CARROCA, formA.getMeio_transp_carroca(),
										FormA.MEIO_TRANSP_ONIBUS, formA.getMeio_transp_onibus(),
										FormA.MEIO_TRANSP_OUTROS, formA.getMeio_transp_outros(),
										FormA.MEIO_TRANSP_QUAIS, formA.getMeio_transp_quais(),
										FormA.NUM_BOLSA_FAMILIA, formA.getNum_bolsa_familia(),
										FormA.PRE_CADASTRO, formA.getPre_cadastro()};
			
			id = dbAdapter.update(formA.getTableName(), FormA.ID_FICHA + "=?", whereArgs, contents);
			
			dbAdapter.setTransactionSuccessful();
		} catch (Throwable e) {
			Log.e(this.getClass().getName(), "Error", e);
			throw e;
		} finally {
			dbAdapter.endTransaction();
		}
		
		return id;
	}
	
	public int delete(long id_ficha) throws Throwable {
		
		int id = 0;
		try {
			dbAdapter.beginTransaction();
			
			FormA formA = new FormA();
			formA.setId_ficha(id_ficha);
			
			String[] whereArgs = new String[]{String.valueOf(formA.getId_ficha())};
			id = dbAdapter.delete(formA.getTableName(), FormA.ID_FICHA + "=?", whereArgs);
			
			dbAdapter.setTransactionSuccessful();
		} catch (Throwable e) {
			Log.e(this.getClass().getName(), "Error", e);
			throw e;
		} finally {
			dbAdapter.endTransaction();
		}
		
		return id;
	}
	
	public FormA get(long id_ficha) {
		FormA formA = new FormA();
		String[] selectionArgs = new String[]{String.valueOf(id_ficha)};
		Cursor cursor = dbAdapter.query(formA.getTableName(), 
						null , 
						FormA.ID_FICHA + "=?", 
						selectionArgs, 
						null, 
						null);
		
		if(cursor == null) {
			formA = null;
		} else {
			if(cursor.moveToFirst()) {
				formA = getFields(cursor);
			}
			
			if(!cursor.isClosed()) cursor.close();
		}
		
		return formA;
	}
	
	public FormA getFields(Cursor cursor) {
		FormA formA = new FormA();
		
		Long id_ficha = cursor.getLong(cursor.getColumnIndex(FormA.ID_FICHA));
		String estado = cursor.getString(cursor.getColumnIndex(FormA.ESTADO));
		String endereco = cursor.getString(cursor.getColumnIndex(FormA.ENDERECO));
		Integer id_endereco = cursor.getInt(cursor.getColumnIndex(FormA.ID_ENDERECO));
		String numero = cursor.getString(cursor.getColumnIndex(FormA.NUMERO));
		String bairro = cursor.getString(cursor.getColumnIndex(FormA.BAIRRO));
		Integer id_bairro = cursor.getInt(cursor.getColumnIndex(FormA.ID_BAIRRO));
		String cep = cursor.getString(cursor.getColumnIndex(FormA.CEP));
		String municipio = cursor.getString(cursor.getColumnIndex(FormA.MUNICIPIO));
		Integer id_municipio = cursor.getInt(cursor.getColumnIndex(FormA.ID_MUNICIPIO));
		String segmento = cursor.getString(cursor.getColumnIndex(FormA.SEGMENTO));
		Integer area = cursor.getInt(cursor.getColumnIndex(FormA.AREA));
		Integer microArea = cursor.getInt(cursor.getColumnIndex(FormA.MICROAREA));
		Integer familia = cursor.getInt(cursor.getColumnIndex(FormA.FAMILIA));
		String data_emissao = cursor.getString(cursor.getColumnIndex(FormA.DATA_EMISSAO));
		int id_tipo_casa = cursor.getInt(cursor.getColumnIndex(FormA.ID_TIPO_CASA));
		String tipo_casa_qual = cursor.getString(cursor.getColumnIndex(FormA.TIPO_CASA_QUAL));
		Integer numero_comodos = cursor.getInt(cursor.getColumnIndex(FormA.NUMERO_COMODOS));
		String energia_eletrica = cursor.getString(cursor.getColumnIndex(FormA.ENERGIA_ELETRICA));
		Integer id_destino_lixo = cursor.getInt(cursor.getColumnIndex(FormA.ID_DESTINO_LIXO));
		Integer id_trat_agua = cursor.getInt(cursor.getColumnIndex(FormA.ID_TRAT_AGUA));
		Integer id_abast_agua = cursor.getInt(cursor.getColumnIndex(FormA.ID_ABAST_AGUA));
		Integer id_destino_fezes = cursor.getInt(cursor.getColumnIndex(FormA.ID_DESTINO_FEZES));
		Integer id_plano_saude = cursor.getInt(cursor.getColumnIndex(FormA.ID_PLANO_SAUDE));
		Integer numero_pessoas_plano = cursor.getInt(cursor.getColumnIndex(FormA.NUMERO_PESSOAS_PLANO));
		String plano_saude = cursor.getString(cursor.getColumnIndex(FormA.PLANO_SAUDE));
		String observacoes = cursor.getString(cursor.getColumnIndex(FormA.OBSERVACOES));
		String doenca_hospital = cursor.getString(cursor.getColumnIndex(FormA.DOENCA_HOSPITAL));
		String doenca_us = cursor.getString(cursor.getColumnIndex(FormA.DOENCA_US));
		String doenca_benzedeira = cursor.getString(cursor.getColumnIndex(FormA.DOENCA_BENZEDEIRA));
		String doenca_farmacia = cursor.getString(cursor.getColumnIndex(FormA.DOENCA_FARMACIA));
		String doenca_outros = cursor.getString(cursor.getColumnIndex(FormA.DOENCA_OUTROS));
		String doenca_quais	= cursor.getString(cursor.getColumnIndex(FormA.DOENCA_QUAIS));
		String meios_comun_radio = cursor.getString(cursor.getColumnIndex(FormA.MEIOS_COMUN_RADIO));
		String meios_comun_tv = cursor.getString(cursor.getColumnIndex(FormA.MEIOS_COMUN_TV));
		String grupos_comun_cooperativa = cursor.getString(cursor.getColumnIndex(FormA.GRUPOS_comun_COOPERATIVA));
		String grupos_comun_religioso = cursor.getString(cursor.getColumnIndex(FormA.GRUPOS_comun_RELIGIOSO));
		String grupos_comun_associacoes = cursor.getString(cursor.getColumnIndex(FormA.GRUPOS_comun_ASSOCIACOES));
		String grupos_comun_outros = cursor.getString(cursor.getColumnIndex(FormA.GRUPOS_comun_OUTROS));
		String grupos_comun_quais = cursor.getString(cursor.getColumnIndex(FormA.GRUPOS_comun_QUAIS));
		String meio_transp_onibus = cursor.getString(cursor.getColumnIndex(FormA.MEIO_TRANSP_ONIBUS));
		String meio_transp_caminhao = cursor.getString(cursor.getColumnIndex(FormA.MEIO_TRANSP_CAMINHAO));
		String meio_transp_carro = cursor.getString(cursor.getColumnIndex(FormA.MEIO_TRANSP_CARRO));
		String meio_transp_carroca = cursor.getString(cursor.getColumnIndex(FormA.MEIO_TRANSP_CARROCA));
		String meio_transp_outros = cursor.getString(cursor.getColumnIndex(FormA.MEIO_TRANSP_OUTROS));
		String meio_transp_quais = cursor.getString(cursor.getColumnIndex(FormA.MEIO_TRANSP_QUAIS));
		String num_bolsa_familia = cursor.getString(cursor.getColumnIndex(FormA.NUM_BOLSA_FAMILIA));
		Integer pre_cadastro = cursor.getInt(cursor.getColumnIndex(FormA.PRE_CADASTRO));
		
		formA.setId_ficha(id_ficha);
		formA.setEstado(estado);
		formA.setId_endereco(id_endereco);
		formA.setEndereco(endereco);
		formA.setNumero(numero);
		formA.setBairro(bairro);
		formA.setId_bairro(id_bairro);
		formA.setCep(cep);
		formA.setMunicipio(municipio);
		formA.setId_municipio(id_municipio);
		formA.setSegmento(segmento);
		formA.setArea(area);
		formA.setMicroArea(microArea);
		formA.setFamilia(familia);
		formA.setData_emissao(data_emissao);
		formA.setId_tipo_casa(id_tipo_casa);
		formA.setTipo_casa_qual(tipo_casa_qual);
		formA.setNum_comodos(numero_comodos);
		formA.setEnergia_eletrica(energia_eletrica);
		formA.setId_destino_lixo(id_destino_lixo);
		formA.setId_trat_agua(id_trat_agua);
		formA.setId_abast_agua(id_abast_agua);
		formA.setId_destino_fezes(id_destino_fezes);
		formA.setId_plano_saude(id_plano_saude);
		formA.setNumero_pessoas_plano(numero_pessoas_plano);
		formA.setObservacoes(observacoes);
		formA.setPlano_saude(plano_saude);
		formA.setDoenca_benzedeira(doenca_benzedeira);
		formA.setDoenca_farmacia(doenca_farmacia);
		formA.setDoenca_hospital(doenca_hospital);
		formA.setDoenca_outros(doenca_outros);
		formA.setDoenca_quais(doenca_quais);
		formA.setDoenca_us(doenca_us);
		formA.setGrupos_comun_associacoes(grupos_comun_associacoes);
		formA.setGrupos_comun_cooperativa(grupos_comun_cooperativa);
		formA.setGrupos_comun_outros(grupos_comun_outros);
		formA.setGrupos_comun_quais(grupos_comun_quais);
		formA.setGrupos_comun_religioso(grupos_comun_religioso);
		formA.setMeio_transp_caminhao(meio_transp_caminhao);
		formA.setMeio_transp_carro(meio_transp_carro);
		formA.setMeio_transp_carroca(meio_transp_carroca);
		formA.setMeio_transp_onibus(meio_transp_onibus);
		formA.setMeio_transp_outros(meio_transp_outros);
		formA.setMeio_transp_quais(meio_transp_quais);
		formA.setMeios_comun_radio(meios_comun_radio);
		formA.setMeios_comun_tv(meios_comun_tv);
		formA.setNum_bolsa_familia(num_bolsa_familia);
		formA.setPre_cadastro(pre_cadastro); 
		
		return formA;
	}
	
	public void truncateFichaA() {
		try {
			dbAdapter.beginTransaction();
			
			int id = dbAdapter.truncate("tblFichaA");
			System.out.println(id);
			
			dbAdapter.setTransactionSuccessful();
		} catch (Throwable e) {
			Log.e(this.getClass().getName(), "Error", e);
		} finally {
			dbAdapter.endTransaction();
		}
		
		
		
	}
	
}
